package be.ipl.eBar.domaine;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

import be.ipl.eBar.util.Util;

@Entity
@Table(name = "BIERES", schema = "EBAR")
public class Biere implements Serializable{

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;

	/**
	 * Attributs
	 * */
	@NotNull
	@Column(unique = true, nullable=false)
	private String nom;
	@NotNull
	@Column(nullable=false)
	private String type;
	@NotNull
	@Column(nullable=false)
	private String couleur;
	@NotNull
	@Column(nullable=false)
	private String brasserie;

	@NotNull
	@Min(0)
	@Max(15)
	private double prix;

	protected Biere() {
		super();
		this.nom = "";
		this.type = "";
		this.couleur = "";
		this.brasserie = "";
	}

	public Biere(String nom, String type, String couleur, String brasserie) {
		super();

		Util.checkNullEmpty(nom);
		Util.checkNullEmpty(type);
		Util.checkNullEmpty(couleur);
		Util.checkNullEmpty(brasserie);

		this.nom = nom;
		this.type = type;
		this.couleur = couleur;
		this.brasserie = brasserie;
	}
	
	public Biere(String nom, String type, String couleur, String brasserie, double prix) {
		super();

		Util.checkNullEmpty(nom);
		Util.checkNullEmpty(type);
		Util.checkNullEmpty(couleur);
		Util.checkNullEmpty(brasserie);
		Util.checkPositive((int)prix );

		this.nom = nom;
		this.type = type;
		this.couleur = couleur;
		this.brasserie = brasserie;
		this.prix = prix;
	}
	

	public int getId() {
		return id;
	}

	public String getNom() {
		return nom;
	}

	public String getType() {
		return type;
	}

	public String getCouleur() {
		return couleur;
	}

	public String getBrasserie() {
		return brasserie;
	}

	public double getPrix() {
		return prix;
	}

	public void setPrix(double prix) {
		Util.checkPositive(prix);
		this.prix = prix;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Biere other = (Biere) obj;
		if (id != other.id)
			return false;
		return true;
	}

}
